_a_d_d_r Source/destination kernel address of the copy.
_n_b_y_t_e_s Number of bytes to copy.
_r_w_f_l_a_g Flag indicating read or write operation. Valid values are
_UUUU_IIII_OOOO______RRRR_EEEE_AAAA_DDDD and _UUUU_IIII_OOOO______WWWW_RRRR_IIII_TTTT_EEEE.
_u_i_o_p Pointer to the _uuuu_iiii_oooo structure for the copy.
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
The _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee function copies _n_b_y_t_e_s of data between the kernel address
_a_d_d_r and the space defined by the _uuuu_iiii_oooo structure pointed to by _u_i_o_p. If
_r_w_f_l_a_g is _UUUU_IIII_OOOO______RRRR_EEEE_AAAA_DDDD, the data is copied from _a_d_d_r to the space described
by the _uuuu_iiii_oooo structure. If _r_w_f_l_a_g is _UUUU_IIII_OOOO______WWWW_RRRR_IIII_TTTT_EEEE, the data is copied from
the space described by the _uuuu_iiii_oooo structure to _a_d_d_r.
The _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg member of the _uuuu_iiii_oooo structure specifies the type of space
described by the _uuuu_iiii_oooo structure. If _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is set to _UUUU_IIII_OOOO______SSSS_YYYY_SSSS_SSSS_PPPP_AAAA_CCCC_EEEE the
_uuuu_iiii_oooo structure describes a portion of the kernel address space. If
_uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is set to _UUUU_IIII_OOOO______UUUU_SSSS_EEEE_RRRR_SSSS_PPPP_AAAA_CCCC_EEEE the _uuuu_iiii_oooo structure describes a portion
of the user address space.
If the copy is successful, _uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee updates the appropriate members of the
_uuuu_iiii_oooo and _iiii_oooo_vvvv_eeee_cccc(D4) structures to reflect the copy (_uuuu_iiii_oooo______oooo_ffff_ffff_ssss_eeee_tttt and _iiii_oooo_vvvv______bbbb_aaaa_ssss_eeee
are increased by _n_b_y_t_e_s and _uuuu_iiii_oooo______rrrr_eeee_ssss_iiii_dddd and _iiii_oooo_vvvv______llll_eeee_nnnn are decrease by
_n_b_y_t_e_s).
RRRReeeettttuuuurrrrnnnn VVVVaaaalllluuuueeeessss
_uuuu_iiii_oooo_mmmm_oooo_vvvv_eeee returns 0 on success or an error number on failure.
UUUUSSSSAAAAGGGGEEEE
LLLLeeeevvvveeeellll
Base only if _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is set to _UUUU_IIII_OOOO______UUUU_SSSS_EEEE_RRRR_SSSS_PPPP_AAAA_CCCC_EEEE.
Base or Interrupt if _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is set to _UUUU_IIII_OOOO______SSSS_YYYY_SSSS_SSSS_PPPP_AAAA_CCCC_EEEE.
Driver-defined basic locks and read/write locks may be held across calls
to this function if _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is _UUUU_IIII_OOOO______SSSS_YYYY_SSSS_SSSS_PPPP_AAAA_CCCC_EEEE but may not be held if
_uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg is _UUUU_IIII_OOOO______UUUU_SSSS_EEEE_RRRR_SSSS_PPPP_AAAA_CCCC_EEEE.
Driver-defined sleep locks may be held across calls to this function
regardless of the value of _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg.
WWWWaaaarrrrnnnniiiinnnnggggssss
If _a_d_d_r specifies an address in user space or if the value of _uuuu_iiii_oooo______ssss_eeee_gggg_ffff_llll_gggg
is not consistent with the type of address space described by the _uuuu_iiii_oooo
structure, the system can panic.
When holding locks across calls to this function, multithreaded drivers
must be careful to avoid creating a deadlock. During the data transfer,
page fault resolution might result in another I/O to the same device.
For example, this could occur if the driver controls the disk drive used